package cn.com.bo.util.timer;
//import static org.quartz.CronScheduleBuilder.cronSchedule;
//import static org.quartz.JobBuilder.newJob;
//import static org.quartz.TriggerBuilder.newTrigger;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
//import org.quartz.Job;
//import org.quartz.JobDetail;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.quartz.JobKey;
//import org.quartz.Scheduler;
//import org.quartz.SchedulerException;
//import org.quartz.Trigger;
//import org.quartz.TriggerKey;
//import org.quartz.impl.StdSchedulerFactory;


/**
 * 类名：QuartzManager <br/>
 * 功能：<br/>
 * 详细：Quartz增、删、改工具类 <br/>
 * 作者： Tliu <br/>
 * 日期：2015-7-17 <br/>
 */
public class QuartzUtils {
 
    private Logger log = null;
 
//    private Scheduler scheduler = null;
//     
//    public QuartzUtils (){
//        try {
//            log = LogManager.getLogger(QuartzUtils.class);
//            scheduler = new StdSchedulerFactory().getScheduler();
//            log.info("初始化调度器 ");
//        } catch (SchedulerException ex) {
//            log.error("初始化调度器=> [失败]:" + ex.getLocalizedMessage());
//        }
//    }   
//    public void addJob(String name, String group, Class<? extends Job> clazz,String cronExpression) {                 
//        try {       
//            //构造任务
//            JobDetail job = newJob(clazz)
//                    .withIdentity(name, group)                  
//                    .build();
//             
//            //构造任务触发器
//            Trigger trg = newTrigger()
//                    .withIdentity(name, group)
//                    .withSchedule(cronSchedule(cronExpression))
//                    .build();       
//             
//            //将作业添加到调度器
//            scheduler.scheduleJob(job, trg);
//            log.info("创建作业=> [作业名称：" + name + " 作业组：" + group + "] ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("创建作业=> [作业名称：" + name + " 作业组：" + group + "]=> [失败]");
//        }
//    }
    
//    public void addJob(final Class clazz) {
//    	Method [] methods = clazz.getDeclaredMethods();
//    	for (final Method m : methods) {
//			if(m.isAnnotationPresent(QuartzTime.class)){
//				QuartzTime qt = m.getAnnotation(QuartzTime.class);  
//	    		if (qt != null) {
//					class Qjob implements Job {
//						@Override
//						public void execute(JobExecutionContext context)
//								throws JobExecutionException {
//							try {
//								m.invoke(clazz.newInstance());
//							} catch (IllegalAccessException e) {
//								// TODO Auto-generated catch block
//								e.printStackTrace();
//							} catch (IllegalArgumentException e) {
//								// TODO Auto-generated catch block
//								e.printStackTrace();
//							} catch (InvocationTargetException e) {
//								// TODO Auto-generated catch block
//								e.printStackTrace();
//							} catch (InstantiationException e) {
//								// TODO Auto-generated catch block
//								e.printStackTrace();
//							}
//						}
//					}
//					try {
//			            //构造任务
//			            JobDetail job = newJob(Qjob.class)
//			                    .withIdentity(m.getName(), clazz.getName())                  
//			                    .build();
//			            
//			            //构造任务触发器
//			            Trigger trg = newTrigger()
//			                    .withIdentity(m.getName()+"trigger", clazz.getName()+"trigger")
//			                    .withSchedule(cronSchedule(qt.cronTime()))
//			                    .build();       
//			             
//			            //将作业添加到调度器
//			            scheduler.scheduleJob(job, trg);
//			            log.info("创建作业=> [作业名称：" + m.getName() + " 作业组：" + clazz.getName() + "] ");
//			        } catch (SchedulerException e) {
//			            e.printStackTrace();
//			            log.error("创建作业=> [作业名称：" + m.getName() + " 作业组：" + clazz.getName() + "]=> [失败]");
//			        }
//				}
//			}
//		}
//    }
     
//    public void removeJob(String name, String group){
//        try {
//            TriggerKey tk = TriggerKey.triggerKey(name, group);
//            scheduler.pauseTrigger(tk);//停止触发器  
//            scheduler.unscheduleJob(tk);//移除触发器
//            JobKey jobKey = JobKey.jobKey(name, group);
//            scheduler.deleteJob(jobKey);//删除作业
//            log.info("删除作业=> [作业名称：" + name + " 作业组：" + group + "] ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("删除作业=> [作业名称：" + name + " 作业组：" + group + "]=> [失败]");
//        }
//    }
//     
//    public void pauseJob(String name, String group){
//        try {
//            JobKey jobKey = JobKey.jobKey(name, group);
//            scheduler.pauseJob(jobKey);
//            log.info("暂停作业=> [作业名称：" + name + " 作业组：" + group + "] ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("暂停作业=> [作业名称：" + name + " 作业组：" + group + "]=> [失败]");
//        }
//    }
//     
//    public void resumeJob(String name, String group){
//        try {
//            JobKey jobKey = JobKey.jobKey(name, group);         
//            scheduler.resumeJob(jobKey);
//            log.info("恢复作业=> [作业名称：" + name + " 作业组：" + group + "] ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("恢复作业=> [作业名称：" + name + " 作业组：" + group + "]=> [失败]");
//        }       
//    }
//     
//    public void modifyTime(String name, String group, String cronExpression){       
//        try {
//            TriggerKey tk = TriggerKey.triggerKey(name, group);
//            //构造任务触发器
//            Trigger trg = newTrigger()
//                    .withIdentity(name, group)
//                    .withSchedule(cronSchedule(cronExpression))
//                    .build();       
//            scheduler.rescheduleJob(tk, trg);
//            log.info("修改作业触发时间=> [作业名称：" + name + " 作业组：" + group + "] ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("修改作业触发时间=> [作业名称：" + name + " 作业组：" + group + "]=> [失败]");
//        }
//    }
// 
//    public void start() {
//        try {
//            scheduler.start();
//            log.info("启动调度器 ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("启动调度器=> [失败]");
//        }
//    }
// 
//    public void shutdown() {
//        try {
//            scheduler.shutdown();
//            log.info("停止调度器 ");
//        } catch (SchedulerException e) {
//            e.printStackTrace();
//            log.error("停止调度器=> [失败]");
//        }
//    }
}